import vnode from './vnode'
import { createElement } from './createElement'
import patchVnode from "./patchVnode"

export default function(oldVnode, newVnode) {
    // 判断传入的第一个参数，是DOM节点还是虚拟节点
    if (!oldVnode.sel) {
        // 传入的第一个参数是DOM节点，此时要包装成虚拟节点
        oldVnode = vnode(oldVnode.tagName.toLowerCase(), {}, [], undefined, oldVnode)
    }

    // 获取并存储oldVnode节点的父节点
    let oldParentNode = oldVnode.elm.parentNode

    // 判断oldVnode和newVnode是不是同一节点
    if (oldVnode.key === newVnode.key && oldVnode.sel === newVnode.sel) {
        patchVnode(oldVnode, newVnode)
    } else {
        let newVnodeElm = createElement(newVnode)
        if (oldParentNode && newVnodeElm) {
            oldParentNode.insertBefore(newVnodeElm, oldVnode.elm);
            // 删除掉旧的Vnode
            oldParentNode.removeChild(oldVnode.elm)
        }
    }
}